/*

* Copyright (c) 2007, National University of Singapore (NUS)
* All rights reserved.
*
* Redistribution and use in source and binary forms, with or without 
* modification, are permitted provided that the following conditions 
* are met:
*
*   * Redistributions of source code must retain the above copyright notice, 
*     this list of conditions,the authors and the following disclaimer.
*   * Redistributions in binary form must reproduce the above copyright notice,
*     this list of conditions,the authors and the following disclaimer in
*     the documentation and/or other materials provided with the distribution.
*   * Neither the name of the university nor the names of its 
*     contributors may be used to endorse or promote products derived from 
*     this software without specific prior written permission.
*
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 
* AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 
* ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE 
* LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR 
* CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF 
* SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 
* INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN 
* CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) 
* ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE 
* POSSIBILITY OF SUCH DAMAGE.
*
* Author: Wenwei Xue (dcsxw@nus.edu.sg)
*/
package psg.servicemanager;
import java.util.*;
import java.net.*;

/**
 * This class implements a Socket Server to handle event subscription to 
 * a physical space.
 */
public class EventServerSocket extends Thread {
	
	ServerSocket eventSocket = null;
	
	int EventServerSocketPort = 9999;
	
	Vector subcribedEvents = new Vector (10,5);	// records for existing event subscriptions
	
	boolean isStopped = false;
    
    ContextDataServices cds;
		
	EventServerSocket (ContextDataServices cds, int EventServerSocketPort) {
		try 
		{
			this.EventServerSocketPort = EventServerSocketPort;
				
			eventSocket = new ServerSocket(EventServerSocketPort);			
				
			this.cds = cds;       
		}
		catch (Exception e) {
			e.printStackTrace();
		}
	}
	
	public void run() {
		
		Socket clientSocket = null;
	
		EventClientSocket ecs;
		
		try {
			while (!isStopped) {
				
				clientSocket = eventSocket.accept();				
			
				ecs = new EventClientSocket(clientSocket, cds);
				
				ecs.start(); 
					
			}
			
			eventSocket.close();
		}
		catch (Exception e) {
			e.printStackTrace();
		}
		
	}
	
	public void terminate() {
		isStopped = true;		
	}
}